ಕನ್ನಡ

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ WeakMap ಮತ್ತು WeakSet ಅನ್ವೇಷಿಸಿ, ದಕ್ಷ ಮೆಮೊರಿ ನಿರ್ವಹಣೆಗೆ ಶಕ್ತಿಯುತ ಸಾಧನಗಳು. ಇವು ಮೆಮೊರಿ ಲೀಕ್‌ಗಳನ್ನು ತಡೆಯುವ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಉತ್ತಮಗೊಳಿಸುವ ಬಗೆಯನ್ನು ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳೊಂದಿಗೆ ತಿಳಿಯಿರಿ.

ಮೆಮೊರಿ ನಿರ್ವಹಣೆಗಾಗಿ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ WeakMap ಮತ್ತು WeakSet: ಒಂದು ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ

ದೃಢವಾದ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮತೆಯುಳ್ಳ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸುವಲ್ಲಿ ಮೆಮೊರಿ ನಿರ್ವಹಣೆ ಒಂದು ಪ್ರಮುಖ ಅಂಶವಾಗಿದೆ. ಆಬ್ಜೆಕ್ಟ್‌ಗಳು ಮತ್ತು ಅರೇಗಳಂತಹ ಸಾಂಪ್ರದಾಯಿಕ ಡೇಟಾ ರಚನೆಗಳು ಕೆಲವೊಮ್ಮೆ ಮೆಮೊರಿ ಲೀಕ್‌ಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು, ವಿಶೇಷವಾಗಿ ಆಬ್ಜೆಕ್ಟ್ ರೆಫರೆನ್ಸ್‌ಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ. ಅದೃಷ್ಟವಶಾತ್, ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ WeakMap ಮತ್ತು WeakSet ಎಂಬ ಎರಡು ಶಕ್ತಿಯುತ ಸಾಧನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ, ಇವುಗಳನ್ನು ಈ ಸವಾಲುಗಳನ್ನು ಎದುರಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ WeakMap ಮತ್ತು WeakSetನ ಸೂಕ್ಷ್ಮತೆಗಳನ್ನು ವಿವರಿಸುತ್ತದೆ, ಅವು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ, ಅವುಗಳ ಪ್ರಯೋಜನಗಳು, ಮತ್ತು ನಿಮ್ಮ ಯೋಜನೆಗಳಲ್ಲಿ ಅವುಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಿಕೊಳ್ಳಲು ಸಹಾಯ ಮಾಡಲು ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ.

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಮೆಮೊರಿ ಲೀಕ್‌ಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು

WeakMap ಮತ್ತು WeakSet ಬಗ್ಗೆ ತಿಳಿಯುವ ಮೊದಲು, ಅವುಗಳು ಪರಿಹರಿಸುವ ಸಮಸ್ಯೆಯನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮುಖ್ಯ: ಮೆಮೊರಿ ಲೀಕ್‌ಗಳು. ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ಮೆಮೊರಿಯನ್ನು ಹಂಚಿಕೆ ಮಾಡಿದಾಗ ಆದರೆ ಆ ಮೆಮೊರಿ ಇನ್ನು ಮುಂದೆ ಅಗತ್ಯವಿಲ್ಲದಿದ್ದರೂ ಅದನ್ನು ಸಿಸ್ಟಮ್‌ಗೆ ಹಿಂತಿರುಗಿಸಲು ವಿಫಲವಾದಾಗ ಮೆಮೊರಿ ಲೀಕ್ ಸಂಭವಿಸುತ್ತದೆ. ಕಾಲಾನಂತರದಲ್ಲಿ, ಈ ಲೀಕ್‌ಗಳು ಸಂಗ್ರಹವಾಗಬಹುದು, ಇದರಿಂದಾಗಿ ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್ ನಿಧಾನವಾಗುತ್ತದೆ ಮತ್ತು ಅಂತಿಮವಾಗಿ ಕ್ರ್ಯಾಶ್ ಆಗಬಹುದು.

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ, ಮೆಮೊರಿ ನಿರ್ವಹಣೆಯನ್ನು ಹೆಚ್ಚಾಗಿ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ. ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ನಿಯತಕಾಲಿಕವಾಗಿ ರೂಟ್ ಆಬ್ಜೆಕ್ಟ್‌ಗಳಿಂದ (ಗ್ಲೋಬಲ್ ಆಬ್ಜೆಕ್ಟ್, ಕಾಲ್ ಸ್ಟಾಕ್, ಇತ್ಯಾದಿ) ಇನ್ನು ಮುಂದೆ ತಲುಪಲಾಗದ ಆಬ್ಜೆಕ್ಟ್‌ಗಳು ಆಕ್ರಮಿಸಿಕೊಂಡಿರುವ ಮೆಮೊರಿಯನ್ನು ಗುರುತಿಸುತ್ತದೆ ಮತ್ತು ಮರುಪಡೆಯುತ್ತದೆ. ಆದಾಗ್ಯೂ, ಉದ್ದೇಶಪೂರ್ವಕವಲ್ಲದ ಆಬ್ಜೆಕ್ಟ್ ರೆಫರೆನ್ಸ್‌ಗಳು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಅನ್ನು ತಡೆಯಬಹುದು, ಇದು ಮೆಮೊರಿ ಲೀಕ್‌ಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಒಂದು ಸರಳ ಉದಾಹರಣೆಯನ್ನು ಪರಿಗಣಿಸೋಣ:

let element = document.getElementById('myElement');
let data = {
  element: element,
  value: 'Some data'
};

// ... later

// ಎಲಿಮೆಂಟ್ ಅನ್ನು DOM ನಿಂದ ತೆಗೆದುಹಾಕಿದರೂ, 'data' ಇನ್ನೂ ಅದಕ್ಕೆ ರೆಫರೆನ್ಸ್ ಅನ್ನು ಹೊಂದಿದೆ.
// ಇದು ಎಲಿಮೆಂಟ್ ಅನ್ನು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಮಾಡುವುದನ್ನು ತಡೆಯುತ್ತದೆ.

ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, data ಆಬ್ಜೆಕ್ಟ್ DOM ಎಲಿಮೆಂಟ್ element ಗೆ ರೆಫರೆನ್ಸ್ ಅನ್ನು ಹೊಂದಿದೆ. ಒಂದು ವೇಳೆ element ಅನ್ನು DOM ನಿಂದ ತೆಗೆದುಹಾಕಿದರೂ ಮತ್ತು data ಆಬ್ಜೆಕ್ಟ್ ಇನ್ನೂ ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದರೆ, ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ element ಆಕ್ರಮಿಸಿಕೊಂಡಿರುವ ಮೆಮೊರಿಯನ್ನು ಮರುಪಡೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಅದು ಇನ್ನೂ data ಮೂಲಕ ತಲುಪಬಹುದಾಗಿದೆ. ಇದು ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಮೆಮೊರಿ ಲೀಕ್‌ಗಳ ಸಾಮಾನ್ಯ ಮೂಲವಾಗಿದೆ.

WeakMap ಪರಿಚಯ

WeakMap ಎನ್ನುವುದು ಕೀ-ವ್ಯಾಲ್ಯೂ ಜೋಡಿಗಳ ಸಂಗ್ರಹವಾಗಿದೆ, ಇದರಲ್ಲಿ ಕೀಗಳು ಆಬ್ಜೆಕ್ಟ್‌ಗಳಾಗಿರಬೇಕು ಮತ್ತು ವ್ಯಾಲ್ಯೂಗಳು ಯಾವುದೇ ಮೌಲ್ಯಗಳಾಗಿರಬಹುದು. "ವೀಕ್" (ದುರ್ಬಲ) ಎಂಬ ಪದವು WeakMap ನಲ್ಲಿನ ಕೀಗಳನ್ನು ದುರ್ಬಲವಾಗಿ ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಲಾಗಿದೆ ಎಂಬುದನ್ನು ಸೂಚಿಸುತ್ತದೆ, ಅಂದರೆ ಆ ಕೀಗಳು ಆಕ್ರಮಿಸಿಕೊಂಡಿರುವ ಮೆಮೊರಿಯನ್ನು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಮರುಪಡೆಯುವುದನ್ನು ಅವು ತಡೆಯುವುದಿಲ್ಲ. ಒಂದು ಕೀ ಆಬ್ಜೆಕ್ಟ್ ನಿಮ್ಮ ಕೋಡ್‌ನ ಯಾವುದೇ ಇತರ ಭಾಗದಿಂದ ಇನ್ನು ಮುಂದೆ ತಲುಪಲಾಗದಿದ್ದರೆ, ಮತ್ತು ಅದನ್ನು ಕೇವಲ WeakMap ನಿಂದ ಮಾತ್ರ ಉಲ್ಲೇಖಿಸಲಾಗುತ್ತಿದ್ದರೆ, ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಆ ಆಬ್ಜೆಕ್ಟ್‌ನ ಮೆಮೊರಿಯನ್ನು ಮರುಪಡೆಯಲು ಸ್ವತಂತ್ರವಾಗಿರುತ್ತದೆ. ಕೀಯನ್ನು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟ್ ಮಾಡಿದಾಗ, WeakMap ನಲ್ಲಿನ ಅನುಗುಣವಾದ ವ್ಯಾಲ್ಯೂ ಕೂಡ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್‌ಗೆ ಅರ್ಹವಾಗುತ್ತದೆ.

WeakMapನ ಪ್ರಮುಖ ಗುಣಲಕ್ಷಣಗಳು:

WeakMapನ ಮೂಲಭೂತ ಬಳಕೆ:

WeakMap ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದಕ್ಕೆ ಇಲ್ಲಿದೆ ಒಂದು ಸರಳ ಉದಾಹರಣೆ:

let weakMap = new WeakMap();
let element = document.getElementById('myElement');

weakMap.set(element, 'ಎಲಿಮೆಂಟ್‌ಗೆ ಸಂಬಂಧಿಸಿದ ಕೆಲವು ಡೇಟಾ');

console.log(weakMap.get(element)); // ಔಟ್‌ಪುಟ್: ಎಲಿಮೆಂಟ್‌ಗೆ ಸಂಬಂಧಿಸಿದ ಕೆಲವು ಡೇಟಾ

// ಎಲಿಮೆಂಟ್ ಅನ್ನು DOM ನಿಂದ ತೆಗೆದುಹಾಕಿದರೆ ಮತ್ತು ಬೇರೆಡೆ ಉಲ್ಲೇಖಿಸದಿದ್ದರೆ,
// ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಅದರ ಮೆಮೊರಿಯನ್ನು ಮರುಪಡೆಯಬಹುದು, ಮತ್ತು WeakMap ನಲ್ಲಿನ ಎಂಟ್ರಿ ಕೂಡ ತೆಗೆದುಹಾಕಲ್ಪಡುತ್ತದೆ.

ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆ: DOM ಎಲಿಮೆಂಟ್ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವುದು

WeakMap ನ ಒಂದು ಸಾಮಾನ್ಯ ಬಳಕೆಯೆಂದರೆ DOM ಎಲಿಮೆಂಟ್‌ಗಳೊಂದಿಗೆ ಸಂಬಂಧಿಸಿದ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುವುದು ಮತ್ತು ಆ ಎಲಿಮೆಂಟ್‌ಗಳನ್ನು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಮಾಡುವುದನ್ನು ತಡೆಯದಿರುವುದು. ಒಂದು ವೆಬ್‌ಪುಟದಲ್ಲಿನ ಪ್ರತಿಯೊಂದು ಬಟನ್‌ಗಾಗಿ ನೀವು ಕೆಲವು ಮೆಟಾಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಲು ಬಯಸುವ ಸನ್ನಿವೇಶವನ್ನು ಪರಿಗಣಿಸಿ:

let buttonMetadata = new WeakMap();

let button1 = document.getElementById('button1');
let button2 = document.getElementById('button2');

buttonMetadata.set(button1, { clicks: 0, label: 'ಬಟನ್ 1' });
buttonMetadata.set(button2, { clicks: 0, label: 'ಬಟನ್ 2' });

button1.addEventListener('click', () => {
  let data = buttonMetadata.get(button1);
  data.clicks++;
  console.log(`ಬಟನ್ 1 ಅನ್ನು ${data.clicks} ಬಾರಿ ಕ್ಲಿಕ್ ಮಾಡಲಾಗಿದೆ`);
});

// button1 ಅನ್ನು DOM ನಿಂದ ತೆಗೆದುಹಾಕಿದರೆ ಮತ್ತು ಬೇರೆಡೆ ಉಲ್ಲೇಖಿಸದಿದ್ದರೆ,
// ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಅದರ ಮೆಮೊರಿಯನ್ನು ಮರುಪಡೆಯಬಹುದು, ಮತ್ತು buttonMetadata ನಲ್ಲಿನ ಅನುಗುಣವಾದ ಎಂಟ್ರಿ ಕೂಡ ತೆಗೆದುಹಾಕಲ್ಪಡುತ್ತದೆ.

ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, buttonMetadata ಪ್ರತಿ ಬಟನ್‌ನ ಕ್ಲಿಕ್ ಸಂಖ್ಯೆ ಮತ್ತು ಲೇಬಲ್ ಅನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಒಂದು ಬಟನ್ ಅನ್ನು DOM ನಿಂದ ತೆಗೆದುಹಾಕಿದರೆ ಮತ್ತು ಬೇರೆಡೆ ಉಲ್ಲೇಖಿಸದಿದ್ದರೆ, ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಅದರ ಮೆಮೊರಿಯನ್ನು ಮರುಪಡೆಯಬಹುದು, ಮತ್ತು buttonMetadata ನಲ್ಲಿನ ಅನುಗುಣವಾದ ಎಂಟ್ರಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲ್ಪಡುತ್ತದೆ, ಇದು ಮೆಮೊರಿ ಲೀಕ್ ಅನ್ನು ತಡೆಯುತ್ತದೆ.

ಅಂತಾರಾಷ್ಟ್ರೀಕರಣದ ಪರಿಗಣನೆಗಳು

ಬಹು ಭಾಷೆಗಳನ್ನು ಬೆಂಬಲಿಸುವ ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್‌ಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ, WeakMap ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಬಹುದು. ನೀವು DOM ಎಲಿಮೆಂಟ್‌ಗಳಿಗೆ ಸಂಬಂಧಿಸಿದ ಸ್ಥಳೀಯ-ನಿರ್ದಿಷ್ಟ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಬಹುದು:

let localizedStrings = new WeakMap();

let heading = document.getElementById('heading');

// ಇಂಗ್ಲಿಷ್ ಆವೃತ್ತಿ
localizedStrings.set(heading, {
  en: 'Welcome to our website!',
  fr: 'Bienvenue sur notre site web!',
  es: '¡Bienvenido a nuestro sitio web!'
});

function updateHeading(locale) {
  let strings = localizedStrings.get(heading);
  heading.textContent = strings[locale];
}

updateHeading('fr'); // ಹೆಡ್ಡಿಂಗ್ ಅನ್ನು ಫ್ರೆಂಚ್‌ಗೆ ಅಪ್‌ಡೇಟ್ ಮಾಡುತ್ತದೆ

ಈ ವಿಧಾನವು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಅನ್ನು ತಡೆಯುವಂತಹ ಬಲವಾದ ರೆಫರೆನ್ಸ್‌ಗಳನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳದೆ DOM ಎಲಿಮೆಂಟ್‌ಗಳೊಂದಿಗೆ ಸ್ಥಳೀಯ ಸ್ಟ್ರಿಂಗ್‌ಗಳನ್ನು ಸಂಯೋಜಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ. ಒಂದು ವೇಳೆ `heading` ಎಲಿಮೆಂಟ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿದರೆ, `localizedStrings` ನಲ್ಲಿನ ಸಂಬಂಧಿತ ಸ್ಥಳೀಯ ಸ್ಟ್ರಿಂಗ್‌ಗಳು ಕೂಡ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್‌ಗೆ ಅರ್ಹವಾಗುತ್ತವೆ.

WeakSet ಪರಿಚಯ

WeakSet WeakMap ಗೆ ಹೋಲುತ್ತದೆ, ಆದರೆ ಇದು ಕೀ-ವ್ಯಾಲ್ಯೂ ಜೋಡಿಗಳ ಬದಲಾಗಿ ಆಬ್ಜೆಕ್ಟ್‌ಗಳ ಸಂಗ್ರಹವಾಗಿದೆ. WeakMap ನಂತೆ, WeakSet ಆಬ್ಜೆಕ್ಟ್‌ಗಳನ್ನು ದುರ್ಬಲವಾಗಿ ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುತ್ತದೆ, ಅಂದರೆ ಅದು ಆ ಆಬ್ಜೆಕ್ಟ್‌ಗಳು ಆಕ್ರಮಿಸಿಕೊಂಡಿರುವ ಮೆಮೊರಿಯನ್ನು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಮರುಪಡೆಯುವುದನ್ನು ತಡೆಯುವುದಿಲ್ಲ. ಒಂದು ಆಬ್ಜೆಕ್ಟ್ ನಿಮ್ಮ ಕೋಡ್‌ನ ಯಾವುದೇ ಇತರ ಭಾಗದಿಂದ ಇನ್ನು ಮುಂದೆ ತಲುಪಲಾಗದಿದ್ದರೆ ಮತ್ತು ಅದನ್ನು ಕೇವಲ WeakSet ನಿಂದ ಮಾತ್ರ ಉಲ್ಲೇಖಿಸಲಾಗುತ್ತಿದ್ದರೆ, ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಆ ಆಬ್ಜೆಕ್ಟ್‌ನ ಮೆಮೊರಿಯನ್ನು ಮರುಪಡೆಯಲು ಸ್ವತಂತ್ರವಾಗಿರುತ್ತದೆ.

WeakSetನ ಪ್ರಮುಖ ಗುಣಲಕ್ಷಣಗಳು:

WeakSetನ ಮೂಲಭೂತ ಬಳಕೆ:

WeakSet ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದಕ್ಕೆ ಇಲ್ಲಿದೆ ಒಂದು ಸರಳ ಉದಾಹರಣೆ:

let weakSet = new WeakSet();
let element1 = document.getElementById('element1');
let element2 = document.getElementById('element2');

weakSet.add(element1);
weakSet.add(element2);

console.log(weakSet.has(element1)); // ಔಟ್‌ಪುಟ್: true
console.log(weakSet.has(element2)); // ಔಟ್‌ಪುಟ್: true

// element1 ಅನ್ನು DOM ನಿಂದ ತೆಗೆದುಹಾಕಿದರೆ ಮತ್ತು ಬೇರೆಡೆ ಉಲ್ಲೇಖಿಸದಿದ್ದರೆ,
// ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟರ್ ಅದರ ಮೆಮೊರಿಯನ್ನು ಮರುಪಡೆಯಬಹುದು, ಮತ್ತು ಅದನ್ನು WeakSet ನಿಂದ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.

ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆ: ಸಕ್ರಿಯ ಬಳಕೆದಾರರನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುವುದು

WeakSet ನ ಒಂದು ಬಳಕೆಯೆಂದರೆ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಸಕ್ರಿಯ ಬಳಕೆದಾರರನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುವುದು. ಬಳಕೆದಾರರು ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಸಕ್ರಿಯವಾಗಿ ಬಳಸುತ್ತಿರುವಾಗ ನೀವು ಬಳಕೆದಾರ ಆಬ್ಜೆಕ್ಟ್‌ಗಳನ್ನು WeakSet ಗೆ ಸೇರಿಸಬಹುದು ಮತ್ತು ಅವರು ನಿಷ್ಕ್ರಿಯರಾದಾಗ ತೆಗೆದುಹಾಕಬಹುದು. ಇದು ಅವರ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಅನ್ನು ತಡೆಯದೆ ಸಕ್ರಿಯ ಬಳಕೆದಾರರನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.

let activeUsers = new WeakSet();

function userLoggedIn(user) {
  activeUsers.add(user);
  console.log(`ಬಳಕೆದಾರ ${user.id} ಲಾಗಿನ್ ಆಗಿದ್ದಾರೆ. ಸಕ್ರಿಯ ಬಳಕೆದಾರರು: ${activeUsers.has(user)}`);
}

function userLoggedOut(user) {
  // WeakSet ನಿಂದ ಸ್ಪಷ್ಟವಾಗಿ ತೆಗೆದುಹಾಕುವ ಅಗತ್ಯವಿಲ್ಲ. ಬಳಕೆದಾರ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಇನ್ನು ಮುಂದೆ ಉಲ್ಲೇಖಿಸದಿದ್ದರೆ,
  // ಅದು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟ್ ಆಗುತ್ತದೆ ಮತ್ತು WeakSet ನಿಂದ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲ್ಪಡುತ್ತದೆ.
  console.log(`ಬಳಕೆದಾರ ${user.id} ಲಾಗೌಟ್ ಆಗಿದ್ದಾರೆ.`);
}

let user1 = { id: 1, name: 'ಆಲಿಸ್' };
let user2 = { id: 2, name: 'ಬಾಬ್' };

userLoggedIn(user1);
userLoggedIn(user2);
userLoggedOut(user1);

// ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ, user1 ಅನ್ನು ಬೇರೆಡೆ ಉಲ್ಲೇಖಿಸದಿದ್ದರೆ, ಅದನ್ನು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟ್ ಮಾಡಲಾಗುತ್ತದೆ
// ಮತ್ತು activeUsers WeakSet ನಿಂದ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ.

ಬಳಕೆದಾರರ ಟ್ರ್ಯಾಕಿಂಗ್‌ಗಾಗಿ ಅಂತಾರಾಷ್ಟ್ರೀಯ ಪರಿಗಣನೆಗಳು

ವಿವಿಧ ಪ್ರದೇಶಗಳ ಬಳಕೆದಾರರೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ, ಬಳಕೆದಾರರ ಆದ್ಯತೆಗಳನ್ನು (ಭಾಷೆ, ಕರೆನ್ಸಿ, ಸಮಯ ವಲಯ) ಬಳಕೆದಾರ ಆಬ್ಜೆಕ್ಟ್‌ಗಳ ಜೊತೆಗೆ ಸಂಗ್ರಹಿಸುವುದು ಸಾಮಾನ್ಯ ಅಭ್ಯಾಸವಾಗಿದೆ. WeakSet ಜೊತೆಗೆ WeakMap ಅನ್ನು ಬಳಸುವುದು ಬಳಕೆದಾರರ ಡೇಟಾ ಮತ್ತು ಸಕ್ರಿಯ ಸ್ಥಿತಿಯ ದಕ್ಷ ನಿರ್ವಹಣೆಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ:

let activeUsers = new WeakSet();
let userPreferences = new WeakMap();

function userLoggedIn(user, preferences) {
  activeUsers.add(user);
  userPreferences.set(user, preferences);
  console.log(`ಬಳಕೆದಾರ ${user.id} ಆದ್ಯತೆಗಳೊಂದಿಗೆ ಲಾಗಿನ್ ಆಗಿದ್ದಾರೆ:`, userPreferences.get(user));
}

let user1 = { id: 1, name: 'ಆಲಿಸ್' };
let user1Preferences = { language: 'en', currency: 'USD', timeZone: 'America/Los_Angeles' };

userLoggedIn(user1, user1Preferences);

ಬಳಕೆದಾರ ಆಬ್ಜೆಕ್ಟ್ ಜೀವಂತವಿರುವಾಗ ಮಾತ್ರ ಬಳಕೆದಾರರ ಆದ್ಯತೆಗಳನ್ನು ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಬಳಕೆದಾರ ಆಬ್ಜೆಕ್ಟ್ ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಟ್ ಆದರೆ ಮೆಮೊರಿ ಲೀಕ್‌ಗಳನ್ನು ತಡೆಯುತ್ತದೆ ಎಂದು ಇದು ಖಚಿತಪಡಿಸುತ್ತದೆ.

WeakMap vs. Map ಮತ್ತು WeakSet vs. Set: ಪ್ರಮುಖ ವ್ಯತ್ಯಾಸಗಳು

WeakMap ಮತ್ತು Map, ಹಾಗೂ WeakSet ಮತ್ತು Set ನಡುವಿನ ಪ್ರಮುಖ ವ್ಯತ್ಯಾಸಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮುಖ್ಯ:

ಗುಣಲಕ್ಷಣ WeakMap Map WeakSet Set
ಕೀ/ವ್ಯಾಲ್ಯೂ ಪ್ರಕಾರ ಕೇವಲ ಆಬ್ಜೆಕ್ಟ್‌ಗಳು (ಕೀಗಳು), ಯಾವುದೇ ಮೌಲ್ಯ (ವ್ಯಾಲ್ಯೂಗಳು) ಯಾವುದೇ ಪ್ರಕಾರ (ಕೀಗಳು ಮತ್ತು ವ್ಯಾಲ್ಯೂಗಳು) ಕೇವಲ ಆಬ್ಜೆಕ್ಟ್‌ಗಳು ಯಾವುದೇ ಪ್ರಕಾರ
ರೆಫರೆನ್ಸ್ ಪ್ರಕಾರ ದುರ್ಬಲ (ಕೀಗಳು) ಬಲವಾದ ದುರ್ಬಲ ಬಲವಾದ
ಇಟರೇಶನ್ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ ಅನುಮತಿಸಲಾಗಿದೆ (forEach, keys, values) ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ ಅನುಮತಿಸಲಾಗಿದೆ (forEach, values)
ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್ ಬೇರೆ ಯಾವುದೇ ಬಲವಾದ ರೆಫರೆನ್ಸ್‌ಗಳು ಇಲ್ಲದಿದ್ದರೆ ಕೀಗಳು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್‌ಗೆ ಅರ್ಹವಾಗಿರುತ್ತವೆ Map ಅಸ್ತಿತ್ವದಲ್ಲಿರುವವರೆಗೂ ಕೀಗಳು ಮತ್ತು ವ್ಯಾಲ್ಯೂಗಳು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್‌ಗೆ ಅರ್ಹವಾಗಿರುವುದಿಲ್ಲ ಬೇರೆ ಯಾವುದೇ ಬಲವಾದ ರೆಫರೆನ್ಸ್‌ಗಳು ಇಲ್ಲದಿದ್ದರೆ ಆಬ್ಜೆಕ್ಟ್‌ಗಳು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್‌ಗೆ ಅರ್ಹವಾಗಿರುತ್ತವೆ Set ಅಸ್ತಿತ್ವದಲ್ಲಿರುವವರೆಗೂ ಆಬ್ಜೆಕ್ಟ್‌ಗಳು ಗಾರ್ಬೇಜ್ ಕಲೆಕ್ಷನ್‌ಗೆ ಅರ್ಹವಾಗಿರುವುದಿಲ್ಲ

WeakMap ಮತ್ತು WeakSet ಅನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕು

WeakMap ಮತ್ತು WeakSet ಈ ಕೆಳಗಿನ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿವೆ:

WeakMap ಮತ್ತು WeakSet ಬಳಸಲು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು

ಬ್ರೌಸರ್ ಹೊಂದಾಣಿಕೆ

WeakMap ಮತ್ತು WeakSet ಎಲ್ಲಾ ಆಧುನಿಕ ಬ್ರೌಸರ್‌ಗಳಿಂದ ಬೆಂಬಲಿತವಾಗಿದೆ, ಅವುಗಳೆಂದರೆ:

WeakMap ಮತ್ತು WeakSet ಅನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಬೆಂಬಲಿಸದ ಹಳೆಯ ಬ್ರೌಸರ್‌ಗಳಿಗಾಗಿ, ಕಾರ್ಯವನ್ನು ಒದಗಿಸಲು ನೀವು ಪಾಲಿಫಿಲ್‌ಗಳನ್ನು ಬಳಸಬಹುದು.

ತೀರ್ಮಾನ

WeakMap ಮತ್ತು WeakSet ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಮೆಮೊರಿಯನ್ನು ದಕ್ಷವಾಗಿ ನಿರ್ವಹಿಸಲು ಅಮೂಲ್ಯವಾದ ಸಾಧನಗಳಾಗಿವೆ. ಅವು ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಮತ್ತು ಅವುಗಳನ್ನು ಯಾವಾಗ ಬಳಸಬೇಕು ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಮೂಲಕ, ನೀವು ಮೆಮೊರಿ ಲೀಕ್‌ಗಳನ್ನು ತಡೆಯಬಹುದು, ನಿಮ್ಮ ಅಪ್ಲಿಕೇಶನ್‌ನ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸಬಹುದು ಮತ್ತು ಹೆಚ್ಚು ದೃಢವಾದ ಹಾಗೂ ನಿರ್ವಹಿಸಬಲ್ಲ ಕೋಡ್ ಅನ್ನು ಬರೆಯಬಹುದು. WeakMap ಮತ್ತು WeakSet ನ ಮಿತಿಗಳನ್ನು, ಉದಾಹರಣೆಗೆ ಕೀಗಳು ಅಥವಾ ಮೌಲ್ಯಗಳ ಮೇಲೆ ಇಟರೇಟ್ ಮಾಡಲು ಅಸಮರ್ಥತೆ, ಪರಿಗಣಿಸಲು ಮರೆಯದಿರಿ ಮತ್ತು ನಿಮ್ಮ ನಿರ್ದಿಷ್ಟ ಬಳಕೆಯ ಸಂದರ್ಭಕ್ಕಾಗಿ ಸೂಕ್ತವಾದ ಡೇಟಾ ರಚನೆಯನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ. ಈ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ, ಜಾಗತಿಕವಾಗಿ ವಿಸ್ತರಿಸುವಂತಹ ಉನ್ನತ-ಕಾರ್ಯಕ್ಷಮತೆಯ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ನಿರ್ಮಿಸಲು ನೀವು WeakMap ಮತ್ತು WeakSet ನ ಶಕ್ತಿಯನ್ನು ಬಳಸಿಕೊಳ್ಳಬಹುದು.